package Sorts;
import Nodo.*;


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Jonathan López, 11106
 */
public class MergeSort{
    private static CadenaNodo temp = new CadenaNodo();
    
        public static void mergeSort(CadenaNodo lista, int num){
            mergeSortR(lista, temp, 0, num-1);
        }
    
        public static void mergeSortR(CadenaNodo lista, CadenaNodo temp, int bajo, 
                int alto){
            int num = alto-bajo+1;
            int medio=bajo + num/2;
            if (num < 2){
                return;
            }
            for(int i=bajo; i<medio; i++){
                temp=lista;                
            }
            mergeSortR(temp,lista,bajo,medio-1);
            mergeSortR(lista,temp,medio,alto);
            merge(lista,temp,bajo,medio,alto);            
        }
        
        public static void merge(CadenaNodo lista, CadenaNodo temp, int bajo,
                int medio, int alto){
            int rIndex = bajo;
            int tIndex = bajo;
            int dIndex = medio;
            Nodo num1 = lista.buscar(dIndex);
            Nodo num2 = temp.buscar(tIndex);
            Nodo num3 = lista.buscar(rIndex++);
            Nodo num4 = lista.buscar(dIndex++);
            Nodo num5 = temp.buscar(tIndex++);
            int a = num1.getInformacion();
            int b = num2.getInformacion();
            while(tIndex<medio && dIndex<=alto){
                if(a<b){
                    num3.siguiente=num4;
                    num4.anterior=num3;
                } else{
                    num3.siguiente=num5;
                    num5.anterior=num3;
                }
                while(tIndex<medio){
                    num3.siguiente=num5;
                    num5.anterior=num3;
                }
                
            }

        }
}